package handler

import (
	"UserServer/api/internal/config"
	"UserServer/api/internal/middleware"
	"UserServer/api/internal/svc"
	"UserServer/rpc/pb"
	"fmt"
	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"log"
)

// SC 在gozero里面，这个客户端的创建应该是在userclient里面
var SC *svc.ServiceContext

// Client 初始化用户客户端提供使用
var Client pb.UserClient

func InitRPC(addr string) *grpc.ClientConn {
	// 使用 grpc.NewClient 创建一个到指定地址的 gRPC 连接
	// 此处使用不安全的证书来实现 SSL/TLS 连接
	conn, err := grpc.NewClient(
		addr,
		grpc.WithTransportCredentials(insecure.NewCredentials()),
	)
	if err != nil {
		log.Fatalf(fmt.Sprintf("grpc connect addr [%s] 连接失败 %s", addr, err))
	}

	// 初始化客户端
	Client = pb.NewUserClient(conn)
	return conn
}

func GrpcClose(conn *grpc.ClientConn) {
	conn.Close()
}

func InitRouter(SysCfg config.System) *gin.Engine {
	// 设置gin的模式
	gin.SetMode(SysCfg.Env)
	// 获得一个默认的gin引擎
	Router := gin.Default()
	// 加载跨域中间件
	Router.Use(middleware.Cors())

	var store = cookie.NewStore([]byte(SysCfg.SessionsSecret))
	Router.Use(sessions.Sessions("session", store))

	UserULogin := Router.Group("/userULogin")
	{
		UserULogin.POST("sendemail", SendEmail)
		UserULogin.POST("login", Login)
		UserULogin.POST("register", Register)
		UserULogin.POST("emaillogin", EmailLogin)

	}

	UserLogin := Router.Group("/userLogin")
	{
		UserLogin.GET("userinfo", GetUser)
		UserLogin.POST("logout", Logout)
	}
	return Router
}
